﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace ThanNhanTao.CommonControl
{
    /// <summary>
    /// Interaction logic for CalendarControl.xaml
    /// </summary>
    public partial class CalendarControl : UserControl
    {
        public CalendarControl()
        {
            InitializeComponent();

            Loaded +=new RoutedEventHandler(CalendarControl_Loaded);
        }

        #region Property
        private int fromYear = 2000;
        /// <summary>
        /// Năm bắt đầu mật định hiển thị trên calendar
        /// </summary>
        public int FromYear
        {
            get { return fromYear; }
            set { fromYear = value; }
        }

        private int toYear = 2050;
        /// <summary>
        /// Năm kết thúc mật định hiển thị trên control
        /// </summary>
        public int ToYear
        {
            get { return toYear; }
            set { toYear = value; }
        }
        private DateTime startDate;

        /// <summary>
        /// Ngày bắt đầu được chọn trên control
        /// </summary>
        public DateTime StartDate
        {
            get { return startDate; }
            set
            {
                startDate = value;
            }
        }

        /// <summary>
        /// Ngày kết thúc, được chọn trên calendar
        /// </summary>
        private DateTime endDate;
        public DateTime EndDate
        {
            get { return endDate; }
            set
            {
                endDate = value;
            }
        }

        #endregion

        private void CalendarControl_Loaded(object sender, RoutedEventArgs e)
        {
            cboNamThang.Items.Clear();
            cboNamQuy.Items.Clear();
            for (int i = fromYear; i <= toYear; i++) {
                cboNamThang.Items.Add(i);
                cboNamQuy.Items.Add(i);
            }

            cboThang.Items.Clear();
            for (int i = 1; i <= 12; i++)
            {
                cboThang.Items.Add("Tháng " + i.ToString());
            }
            cboQuy.Items.Clear();
            for (int i = 1; i <= 4; i++)
            {
                cboQuy.Items.Add("Quý " + i.ToString());
            }


            cboNamThang.SelectedItem = DateTime.Now.Year;
            cboNamQuy.SelectedItem = DateTime.Now.Year;

            cboQuy.SelectedIndex = 0;
            cboThang.SelectedIndex = cboThang.Items.IndexOf("Tháng " + DateTime.Now.Month);

            if (rdbTheoThang.IsChecked == true)
            {
                dpTuNgay.DateTime = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1);
                dpDenNgay.DateTime = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1).AddMonths(1).AddDays(-1);
            }
            else if (rdbTheoQuy.IsChecked == true)
            {
                dpTuNgay.DateTime = new DateTime(DateTime.Now.Year, 1, 1);
                dpDenNgay.DateTime = new DateTime(DateTime.Now.Year, 1, 1).AddMonths(3).AddDays(-1);
            }
            else
            {
                dpTuNgay.DateTime = DateTime.Now;
                dpDenNgay.DateTime = DateTime.Now;
            }

        }

        /// <summary>
        /// Sự kiện set ngày tháng cho Calendar
        /// </summary>
        /// <param name="mYear"></param>
        /// <param name="mMonth"></param>
        private void setEndDate(int mYear, int mMonth)
        {
            bool bolValid = false;
            int intMaxDate = 31;
            while (!bolValid)
            {
                try
                {
                    dpDenNgay.DateTime = new DateTime(mYear, mMonth, intMaxDate);
                    bolValid = true;
                }
                catch { }
                intMaxDate -= 1;
            }
        }

        /// <summary>
        /// Phương thức set control ẩn hiện theo loại thông tin được chọn (Ngày,Tháng,Quý, Năm)
        /// </summary>
        private void setEnable()
        {
            dpTuNgay.IsEnabled = false;
            dpDenNgay.IsEnabled = false;
            cboNamQuy.IsEnabled = false;
            cboQuy.IsEnabled = false;
            cboNamThang.IsEnabled = false;
            cboThang.IsEnabled = false;
        }

        /// <summary>
        /// Sự kiện người dùng thay đổi thông tin tin trên control
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public void User_Event(object sender, RoutedEventArgs e)
        {
            try
            {
                setEnable();
                if (rdbTheoThang.IsChecked == true)
                {
                    dpTuNgay.DateTime = new DateTime(Int32.Parse(cboNamThang.SelectedItem.ToString()), Int32.Parse(cboThang.SelectedItem.ToString().Substring(6)), 1);
                    setEndDate(int.Parse(cboNamThang.SelectedItem.ToString()), Int32.Parse(cboThang.SelectedItem.ToString().Substring(6)));
                    cboNamThang.IsEnabled = true;
                    cboThang.IsEnabled = true;
                }
                else if (rdbTheoQuy.IsChecked == true)
                {
                    int intMonthQuy = Int32.Parse(cboQuy.SelectedItem.ToString().Substring(4));
                    intMonthQuy = (intMonthQuy - 1) * 3 + 1;
                    dpTuNgay.DateTime = new DateTime(Int32.Parse(cboNamQuy.SelectedItem.ToString()), intMonthQuy, 1);
                    setEndDate(int.Parse(cboNamQuy.SelectedItem.ToString()), intMonthQuy + 2);
                    cboNamQuy.IsEnabled = true;
                    cboQuy.IsEnabled = true;
                }
                else
                {
                    dpTuNgay.IsEnabled = true;
                    dpDenNgay.IsEnabled = true;
                }
            }
            catch { }
        }

        private void dpTuNgay_EditValueChanged(object sender, DevExpress.Xpf.Editors.EditValueChangedEventArgs e)
        {
            if (dpDenNgay.DateTime < dpTuNgay.DateTime)
            {
                dpDenNgay.DateTime = dpTuNgay.DateTime;
            }
            startDate = dpTuNgay.DateTime;
            endDate = dpDenNgay.DateTime;
        }
    }
}
